410. Split Array Largest Sum

题目 410. Split Array Largest Sum

image-ae000c78

思路分析

代码实现

class Solution {

    private boolean check(int mid,int[] nums,int k){
        int cnt=1;
        int cursum=0;

        for(int num:nums){
            if(cursum+num>mid){
                cnt++;
                cursum=num;
            }else{
                cursum+=num;
            }
        }

        return cnt<=k;
    }

    public int splitArray(int[] nums, int k) {
        int maxv=0,sumv=0;
        for(int num:nums){
            maxv = Math.max(num,maxv);
            sumv += num;
        }
        int l=maxv,r=sumv;
        while(l<r){
            int mid=l+r>>1;
            if(check(mid,nums,k)){
                r=mid;
            }else{
                l=mid+1;
            }
        }
        return r;
    }
}

同类题型

视频讲解